#include<QAudioFormat>
#include<QAudioOutput>
#include<QThread>


int main22(){
    //设置音频输出格式
    QAudioFormat fmt;

    //设置采样率
    fmt.setSampleRate(44100);

    //设置采样位数
    fmt.setSampleSize(16);

    //设置声道数
    fmt.setChannelCount(1);

    //设置解码方式
    fmt.setCodec("audio/pcm");

    // 设定字节序，以小端模式播放音频文件
    fmt.setByteOrder(QAudioFormat::LittleEndian);

    // 设定采样类型。根据采样位数来设定。
    fmt.setSampleType(QAudioFormat::UnSignedInt);

    // 创建QAudioOutput对象并初始化
    QAudioOutput *out = new QAudioOutput(fmt);

    // 调用start函数后，返回QIODevice对象的地址
    QIODevice *io = out->start();

    //获取设备播放一个周期所需要的字节数
    int size = out->periodSize();

    //创建缓冲区
    char *buf = new char[size];

    //以二进制只读方式打开pcm文件
    FILE *fp = fopen("d:/1.pcm", "rb");

    //判断是否读到末尾
    while(!feof(fp))
    {
        //判断空闲空间是否小于一个周期的大小，如果是则说明CPU处理速度太快，得等一等。
        if(out->bytesFree() < size)
        {
            QThread::msleep(1);
            continue;
        }

        int len = fread(buf, 1, size, fp);

        //判断是否成功读入
        if(len <= 0)
        {
            break;
        }

        //这里相当于写入到电脑声卡的缓冲区，接下来的工作由声卡完成，与我们无关
        io->write(buf, len);
    }

    fclose(fp);    //关闭文件

    //资源释放
    if(NULL != buf)
    {
        delete buf;
        buf = NULL;
    }

    if(NULL != out)
    {
        delete out;
        out = NULL;
    }

}
